package scene;

import geometrie.Point;
/**
 * 
 * Class Facette3D
 * @author Manuel
 * @author Marcos
 */
public class Facette3D {
	/**
	 * Tableau de 3 points pour
	 * former la facette en 3D
	 */
	private Point[] point;
	
	/**
	 * Constructeur Null
	 */
	public Facette3D(){	}
	
	/**
	 * Constructeur à partir de 3 points
	 * @param point1 Point 1 
	 * @param point2 Point 2  
	 * @param point3 Point 3
	 */
	public Facette3D(Point point1, Point point2, Point point3){
		point = new Point[3];
		point[0] = point1;//new Point(point1);
		point[1] = point2;//new Point(point2);
		point[2] = point3;//new Point(point3);
	}
	/**
	 * Constructeur à partir de un Tableau
	 * @param p Tableau de 3 Points
	 */
	public Facette3D(Point[] p){
		point[0] = new Point(p[0]);
		point[1] = new Point(p[1]);
		point[2] = new Point(p[2]);
	}
	/**
	 * Etablir les 3 points du Objet Facette
	 * @param p Tableau de 3 Points
	 */
	public void setPoint(Point[] p){
		point[0] = new Point(p[0]);
		point[1] = new Point(p[1]);
		point[2] = new Point(p[2]);
	}
	/**
	 * Etablir le point sur l'index donnee
	 * @param index l'index sur les 3 points
	 * @param p La Valeur du point
	 */
	public void setPointAt(int index, Point p){
		point[index] = new Point(p);
	}
	/**
	 * Obtenir le points dans l'index donnee
	 * @param index l'index du point a obtenir
	 * @return Le point
	 * @exception IndexOutOfBounds
	 */
	public Point getPointAt(int index){
		if(index > 2)
			throw new IndexOutOfBoundsException();
		else
			return point[index];
	}
	/**
	 * Obtenir l'Tableau des Points
	 * @return les points
	 */
	public Point[] getPoint(){
		return point;
	}
	/**
	 * Obtenir le Point just au Baricentre a partir des
	 * 3 points dans la facette.
	 * @return Point Baricentre
	 */
	public Point getBarycentre(){
		double x = 0,y = 0,z = 0;
		for(int i = 0; i < 3; i++){
			x += point[i].getXCartesien();
			y += point[i].getYCartesien();
			z += point[i].getZCartesien();
		}
		
		return new Point(x/3,y/3,z/3);
	}
	/**
	 * Generer le toString() du Objet Facette pour afficher
	 * ses 3 points
	 */
	public String toString(){
		return new String("P1: " + point[0] + ", P2: " + point[1] + ", P3: " + point[2]) ;//+ ", B: " + getBarycentre());
	}
}
